package com.zhuang.chapter18;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;

/**
 * 
 * @Description
 * @author ZhuangKang Email:ITkxz0830@136.com
 * @version
 * @date 2022年7月14日下午2:11:41
 *
 */
@SuppressWarnings("resource")
public class Test3 {
	public static void main(String[] args) {

		// solution2();

		// solution3();

		// solution4();

		// solution5();

		// solution6();

		// int[] arr= {1,4,2,6,89,54};
		// bubbleSort(arr);

		// solution07();

		// solution08();

		// solution09();

		// int f = f(6);
		// System.out.println(f);

		Student[] students = { new Student(1, "小红"), new Student(2, "小庄"), new Student(3, "小康") };
		String[] name = { students[0].getName(), students[2].getName(), students[1].getName() };
		String[] subject = { "语文", "数学", "英语" };
		int[][] score = { { 80, 75, 92 }, { 61, 65, 71 }, { 59, 63, 70 } };
		// TestMatrix(subject, name, score);
		// count();

		// count5();

		// solution10();

		// solution12();

		// solution13();

		// solution14();

		// solution15();

		// gy_gb();
		pf(90);
	}

	public static void solution4() {
		for (int i = 1; i <= 10; i++) {
			for (int j = 0; j < i - 1; j++) {
				System.out.print("  ");
			}
			for (int j = 10 - i; j >= 0; j--) {// 根据i的值递减
				System.out.print("* ");
			}
			System.out.println(" ");
		}
		System.out.println("-----------------------");

		for (int i = 1; i <= 10; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print("* ");
			}
			System.out.println(" ");
		}

		System.out.println("-----------------------");

		for (int i = 1; i <= 10; i++) {
			for (int j = 1; j <= 2 * i - 1; j++) {
				System.out.print("* ");
			}
			System.out.println(" ");
		}

		System.out.println("-----------------------");

		for (int i = 1; i <= 10; i++) {
			for (int j = 10; j >= i; j--) {
				System.out.print("* ");
			}
			System.out.println(" ");
		}
		System.out.println("-----------------------");
		for (int i = 1; i <= 10; i++) {
			for (int j = 10; j > i; j--) {
				System.out.print(" ");
			}
			for (int j = 1; j <= 2 * i - 1; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

	/**
	 * 
	 * @Title: solution5
	 * @Description: 打印1000以内的素数
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution5() {
		for (int i = 1; i <= 1000; i++) {
			int count = 0;
			for (int j = 1; j <= i; j++) {
				if (i % j == 0) {
					count++;
				}
			}
			if (count == 2) {
				System.out.println(i);
			}
		}
	}

	/**
	 * @Title: solution07
	 * @Description:程序分析：判断素数的方法：用一个数分别去除2到sqrt(这个数)，如果能被整除， 则表明此数不是素数，反之是素数。
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution07() {
		Scanner scanner = new Scanner(System.in);
		int num = scanner.nextInt();
		boolean isPrime = true;
		for (int i = 2; i < Math.sqrt(num); i++) {
			if (num % i == 0) {
				isPrime = false;
				break;
			}
		}
		if (isPrime == true) {
			System.out.println(num + "是素数");
		} else {
			System.out.println(num + "不是素数");
		}
	}

	/**
	 * 
	 * @Title: solution08
	 * @Description: 题目：利用条件运算符的嵌套来完成此题：学习成绩> =90分的同学用A表示，60-89分之间的用B表示，60分以下的用C表示。
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution08() {
		System.out.println("输入一个成绩");
		Scanner scanner = new Scanner(System.in);
		int grade = scanner.nextInt();
		System.out.println(grade >= 90 ? "A" : grade >= 60 ? "B" : "C");
		if (grade >= 90) {
			System.out.println("A");
		} else if (grade <= 89 && grade >= 60) {
			System.out.println("B");
		} else {
			System.out.println("C");
		}
	}

	/**
	 * 
	 * @Title: solution09
	 * @Description: 题目：求s=a+aa+aaa+aaaa+aa...a的值，其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加)，几个数相加有键盘控制。
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution09() {
		System.out.println("请输入原始的数字");
		Scanner scanner = new Scanner(System.in);
		int a = scanner.nextInt();
		System.out.println("请输入要相加的个数");
		int n = scanner.nextInt();
		int temp = 0;
		int sum = 0;
		for (int i = 0; i < n; i++) {
			temp += a * (int) Math.pow(10, i);
			sum += temp;
		}
		System.out.print(sum);
	}

	/**
	 * 
	 * @Title: f
	 * @Description: 题目：古典问题：有一对兔子，从出生后第3个月起每个月都生一对兔子，小兔子长到第三个月后每个月又生一对兔子，假如兔子都不死，问每个月的兔子总数为多少？//这是一个菲波拉契数列问题
	 * @author: KangXiaoZhuang
	 * @param: @param  n
	 * @param: @return
	 * @return: int
	 * @throws
	 */
	public static int f(int n) {
		if (n != 1 && n != 2) {
			if (n != 3) {
				return f(n - 1) + f(n - 2);
			} else {
				return 2;
			}
		} else {
			return 1;
		}
	}

	/**
	 * 
	 * @Title: TestMatrix
	 * @Description: 二维数组 存储 三名同学 三门成绩 计算三个同学平均成绩 三门课的平均分
	 * @author: KangXiaoZhuang
	 * @param: @param subject 三门成绩
	 * @param: @param name 三名同学
	 * @param: @param arr 二维数组
	 * @return: void
	 * @throws
	 */
	public static void TestMatrix(String[] subject, String[] name, int arr[][]) {
		int sumScore = 0;
		int sumSub = 0;
		int j = 0;
		int index = 0;
		while (j < 3) {
			for (int i = 0; i < arr.length; i++) {
				sumScore += arr[j][i];
			}
			System.out.println(name[j] + "同学的总分为-->" + sumScore + ",平均分为" + sumScore / 3);
			j++;
			sumScore = 0;
		}
		while (index < 3) {
			for (int i = 0; i < arr[0].length; i++) {
				sumSub += arr[i][index];
			}
			System.out.println(subject[index] + "课程总分为-->" + sumSub + ",平均分为" + sumSub / 3);
			index++;
			sumSub = 0;
		}
	}

	/**
	 * 
	 * @Title: count
	 * @Description: 计算1-99奇数的值
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void count() {
		int sum = 0;
		for (int i = 1; i < 100; i++) {
			if (i % 2 == 1) {
				sum += i;
			}
		}
		System.out.println("1+3+5+··········99=" + sum);
	}

	/**
	 * 
	 * @Title: count5
	 * @Description: 计算5的阶乘
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void count5() {
		int a = 1;
		int sum = 1;
		do {
			sum = sum * a++;
		} while (a < 6);
		System.out.println(sum);
	}

	/**
	 * 。
	 * 
	 * @Title: solution10
	 * @Description: 题目：输入三个整数x,y,z，请把这三个数由小到大输出
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution10() {
		int[] nums = new int[3];
		System.out.println("输入3个数字 Enter确认");
		for (int i = 0; i < nums.length; i++) {
			Scanner scanner = new Scanner(System.in);
			nums[i] = scanner.nextInt();
		}
		Arrays.sort(nums);
		System.out.println(Arrays.toString(nums));
	}

	/**
	 * 
	 * @Title: solution11
	 * @Description: 题目：猴子吃桃问题：猴子第一天摘下若干个桃子，当即吃了一半，还不瘾，又多吃了一个
	 *               第二天早上又将剩下的桃子吃掉一半，又多吃了一个。以后每天早上都吃了前一天剩下
	 *               的一半零一个。到第10天早上想再吃时，见只剩下一个桃子了。求第一天共摘了多少。
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution11() {
		int i;
		int x = 1;
		for (i = 9; i >= 1; i--) {
			x = (x + 1) * 2;
		}
		System.out.println("第一天共摘了桃子为：" + x);
	}

	/**
	 * 
	 * @Title: solution12
	 * @Description: 打印奇数直角三角形
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution12() {
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= 2 * i - 1; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}

	/**
	 * 
	 * @Title: solution13
	 * @Description: 题目：求1+2!+3!+...+5!的和 1 2 6 24 120
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution13() {
		int sum = 0;
		for (int i = 1; i < 6; i++) {
			sum += factorial(i);
		}
		System.out.println(sum);
	}

	/**
	 * 
	 * @Title: factorial
	 * @Description: 递归算阶乘
	 * @author: KangXiaoZhuang
	 * @param: @param  n
	 * @param: @return
	 * @return: int
	 * @throws
	 */
	public static int factorial(int n) {
		if (n == 1) {
			return 1;
		}
		return n * factorial(n - 1);
	}

	/**
	 * 
	 * @Title: solution14
	 * @Description: 题目：有5个人坐在一起，问第五个人多少岁？他说比第4个人大2岁。问第4个人岁数，他说比第3个人大2岁。问第三个人，又说比第2人大两岁。问第2个人，说比第一个人大两岁。最后问第一个人，他说是10岁。请问第五个人多大？
	 * @author: KangXiaoZhuang
	 * @param:
	 * @return: void
	 * @throws
	 */
	public static void solution14() {
		int age = 10;
		for (int i = 1; i < 5; i++) {
			age += 2;
		}
		System.out.println(age);
	}

	public static void gy_gb() {
		int m, n;
		int gy = 0, gb = 0;
		System.out.println("请输入输入两个正整数");
		Scanner scanner = new Scanner(System.in);
		m = scanner.nextInt();
		n = scanner.nextInt();
		for (gy = m; gy >= 1; --gy) {
			if (m % gy == 0 && n % gy == 0)
				break;
		}
		gb = m * n / gy;
		System.out.printf("%d,%d的最小公倍数为：%d,最大公约数为：%d", m, n, gb, gy);
	}
	/*
	 * 题目：将一个正整数分解质因数。例如：输入90,打印出90=2*3*3*5。   
	   程序分析：对n进行分解质因数，应先找到一个最小的质数k，然后按下述步骤完成：   
	   (1)如果这个质数恰等于n，则说明分解质因数的过程已经结束，打印出即可。   
       (2)如果n <> k，但n能被k整除，则应打印出k的值，并用n除以k的商,作为新的正整数你n,重复执行第一步。   
       (3)如果n不能被k整除，则用k+1作为k的值,重复执行第一步。
	 */
	public static void pf(int n) {
		for (int i = 2; i <= n; ++i) {
			// 枚举因数
			if (n % i == 0) {
				int s = 0;
				// 求次数
				while (n % i == 0) {
					n /= i;
					++s;
				}
				System.out.println(i + " " + s);
			}
		}
	}

}